package com.dkd.manage.service;

import com.dkd.manage.domain.Task;
import com.dkd.manage.domain.dto.TaskDto;
import com.dkd.manage.domain.vo.TaskVo;

import java.util.List;
import java.util.Set;

/**
 * 工单Service接口
 *
 * @author xiaoyu
 * @date 2025-08-14
 */
public interface ITaskService {

    /**
     * 查询工单
     *
     * @param taskId 工单主键
     * @return 工单
     */
    Task selectTaskByTaskId(Long taskId);

    /**
     * 查询工单列表
     *
     * @param task 工单
     * @return 工单集合
     */
    List<Task> selectTaskList(Task task);

    /**
     * 新增工单
     *
     * @param task 工单
     * @return 结果
     */
    int insertTask(Task task);

    /**
     * 修改工单
     *
     * @param task 工单
     * @return 结果
     */
    int updateTask(Task task);

    /**
     * 批量删除工单
     *
     * @param taskIds 需要删除的工单主键集合
     * @return 结果
     */
    int deleteTaskByTaskIds(Long[] taskIds);

    /**
     * 删除工单信息
     *
     * @param taskId 工单主键
     * @return 结果
     */
    int deleteTaskByTaskId(Long taskId);

    /**
     * 查询工单列表
     *
     * @param task 工单
     * @return 工单集合
     */
    List<TaskVo> selectTaskVoList(Task task);

    /**
     * 新增运营运维工单
     *
     * @param taskDto 工单对象
     * @return 结果
     */
    int insertTaskDto(TaskDto taskDto);

    /**
     * 取消工单
     *
     * @param task 工单对象
     * @return 结果
     */
    int cancelTask(Task task);

    // === 新增员工绩效计算方法 ===

    /**
     * 统计员工已完成的任务数量
     */
    Integer countCompletedTasksByEmp(Long empId);

    /**
     * 统计员工当前未完成任务数量
     */
    Integer countCurrentTasksByEmp(Long empId);

    /**
     * 统计员工总任务数量
     */
    Integer countTotalTasksByEmp(Long empId);

    /**
     * 统计员工成功完成任务数量
     */
    Integer countSuccessfulTasksByEmp(Long empId);

    /**
     * 获取员工熟悉的设备类型
     */
    Set<String> getSkilledMachinesByEmp(Long empId);

    /**
     * 获取员工平均任务完成时间（小时）
     */
    Double getAvgCompletionTimeByEmp(Long empId);

    /**
     * 获取员工平均质量评分
     */
    Double getAvgQualityScoreByEmp(Long empId);

    /**
     * 统计员工今日已完成任务数
     */
    Integer countTodayTasksByEmp(Long empId);

    /**
     * 获取员工任务完成率
     */
    Double getTaskCompletionRate(Long empId);
}
